% meta events
-define(MIDI_META_SEQUENCE_NUMBER, 0).
-define(MIDI_META_TEXT_EVENT, 1).
-define(MIDI_META_COPYRIGHT_NOTICE, 2).
-define(MIDI_META_SEQUENCE_TRACK_NAME, 3).
-define(MIDI_META_INSTRUMENT_NAME, 4).
-define(MIDI_META_LYRIC, 5).
-define(MIDI_META_MARKER, 6).
-define(MIDI_META_CUE_POINT, 7).
-define(MIDI_META_MIDI_PORT_OLD, 16#21).
-define(MIDI_META_END_OF_TRACK, 16#2F).
-define(MIDI_META_SET_TEMPO, 16#51).
-define(MIDI_META_SMTPE_OFFSET, 16#54).
-define(MIDI_META_TIME_SIGNATURE, 16#58).
-define(MIDI_META_KEY_SIGNATURE, 16#59).
% Channel messages
-define(MIDI_STATUS_OFF, 16#8).
-define(MIDI_STATUS_ON, 16#9).
-define(MIDI_STATUS_POLY_AFTERTOUCH, 16#A).
-define(MIDI_STATUS_CONTROLLER_CHANGE, 16#B).
-define(MIDI_STATUS_PROGRAM_CHANGE, 16#C).
-define(MIDI_STATUS_AFTERTOUCH, 16#D).
-define(MIDI_STATUS_PITCH_BEND, 16#E).
% System common messages
-define(MIDI_STATUS_SYSEX, 16#F0).
-define(MIDI_STATUS_SONG_POINTER, 16#F2).
-define(MIDI_STATUS_SYSEX_F7, 16#F7).
-define(MIDI_STATUS_TIMING_CLOCK, 16#F8).
-define(MIDI_STATUS_START, 16#FA).
-define(MIDI_STATUS_CONTINUE, 16#FB).
-define(MIDI_STATUS_STOP, 16#FC).
-define(MIDI_STATUS_ACTIVE_SENSING, 16#FE).
-define(MIDI_STATUS_META, 16#FF).

% message data
-define(MIDI_MESSAGE_BANK_MSB_CONTROL, 0).
-define(MIDI_MESSAGE_BANK_LSB_CONTROL, 32).

% midi file header
-record(midi_file_header, {format_type, n_tracks, time_division}).

% controllers
-define(MIDI_CONTROLLER_BANK_SELECT, 0).
-define(MIDI_CONTROLLER_MODULATION_WHEEL, 1).
-define(MIDI_CONTROLLER_BREATH_CONTROLLER, 2).
-define(MIDI_CONTROLLER_FOOT_CONTROLLER, 4).
-define(MIDI_CONTROLLER_PORTAMENTO_TIME, 5).
-define(MIDI_CONTROLLER_DATA_ENTRY_MSB, 6).
-define(MIDI_CONTROLLER_MAIN_VOLUME, 7).
-define(MIDI_CONTROLLER_BALANCE, 8).
-define(MIDI_CONTROLLER_PAN, 10).
-define(MIDI_CONTROLLER_EXPRESSION, 11).
-define(MIDI_CONTROLLER_EFFECT_CONTROL_1, 12).
-define(MIDI_CONTROLLER_EFFECT_CONTROL_2, 13).
-define(MIDI_CONTROLLER_GENERAL_PURPOSE_1, 16).
-define(MIDI_CONTROLLER_GENERAL_PURPOSE_2, 17).
-define(MIDI_CONTROLLER_GENERAL_PURPOSE_3, 18).
-define(MIDI_CONTROLLER_GENERAL_PURPOSE_4, 19).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_0, 32).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_1, 33).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_2, 34).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_3, 35).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_4, 36).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_5, 37).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_6, 38).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_7, 39).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_8, 40).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_9, 41).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_10, 42).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_11, 43).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_12, 44).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_13, 45).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_14, 46).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_15, 47).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_16, 48).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_17, 49).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_18, 50).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_19, 51).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_20, 52).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_21, 53).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_22, 54).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_23, 55).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_24, 56).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_25, 57).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_26, 58).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_27, 59).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_28, 60).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_29, 61).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_30, 62).
-define(MIDI_CONTROLLER_CONTROLLER_LSB_31, 63).
-define(MIDI_CONTROLLER_DAMPER_PEDAL, 64).
-define(MIDI_CONTROLLER_PORTAMENTO, 65).
-define(MIDI_CONTROLLER_SOSTENUTO, 66).
-define(MIDI_CONTROLLER_SOFT_PEDAL, 67).
-define(MIDI_CONTROLLER_LEGATO_FOOTSWITCH, 68).
-define(MIDI_CONTROLLER_HOLD_2, 69).
-define(MIDI_CONTROLLER_SOUND_VARIATION, 70).
-define(MIDI_CONTROLLER_TIMBRE, 71).
-define(MIDI_CONTROLLER_RELEASE_TIME, 72).
-define(MIDI_CONTROLLER_ATTACK_TIME, 73).
-define(MIDI_CONTROLLER_BRIGHTNESS, 74).
-define(MIDI_CONTROLLER_SOUND_CONTROLLER_6, 75).
-define(MIDI_CONTROLLER_SOUND_CONTROLLER_7, 76).
-define(MIDI_CONTROLLER_SOUND_CONTROLLER_8, 77).
-define(MIDI_CONTROLLER_SOUND_CONTROLLER_9, 78).
-define(MIDI_CONTROLLER_SOUND_CONTROLLER_10, 79).
-define(MIDI_CONTROLLER_GENERAL_PURPOSE_5, 80).
-define(MIDI_CONTROLLER_GENERAL_PURPOSE_6, 81).
-define(MIDI_CONTROLLER_GENERAL_PURPOSE_7, 82).
-define(MIDI_CONTROLLER_GENERAL_PURPOSE_8, 83).
-define(MIDI_CONTROLLER_PORTAMENTO_CONTROL, 84).
-define(MIDI_CONTROLLER_EFFECTS_DEPTH_1, 91).
-define(MIDI_CONTROLLER_EFFECTS_DEPTH_2, 92).
-define(MIDI_CONTROLLER_EFFECTS_DEPTH_3, 93).
-define(MIDI_CONTROLLER_EFFECTS_DEPTH_4, 94). 
-define(MIDI_CONTROLLER_EFFECTS_DEPTH_5, 95).
-define(MIDI_CONTROLLER_DATA_INCREMENT, 96).
-define(MIDI_CONTROLLER_DATA_DECREMENT, 97).
-define(MIDI_CONTROLLER_NON_REGISTERED_PARAMETER_NUMBER_LSB, 98).
-define(MIDI_CONTROLLER_NON_REGISTERED_PARAMETER_NUMBER_MSB, 99).
-define(MIDI_CONTROLLER_REGISTERED_PARAMETER_NUMBER_LSB, 100).
-define(MIDI_CONTROLLER_REGISTERED_PARAMETER_NUMBER_MSB, 101).
